import db from '../db/index.js'
import bcrypt from 'bcryptjs'
import jwt from 'jsonwebtoken'
import { tokenSetting } from '../config.js'
// 用户路由对应处理函数
// 注册接口处理函数
export const regUser = (req,res)=>{
    // 判断用户的账号密码合法性
    const userInfo = req.body
    // 判断新用户的用户名是否重复
    // 查询sql语句
    const sqlStr = 'select * from ev_users where username=?'
    db.query(sqlStr,[userInfo.username],(err,result)=>{
        // 执行sql语句失败
        if(err){
            console.log('查询用户名是否占用sql语句失败')
            return res.cc('查询用户名是否占用sql语句失败')
        }
        // 查询的结果是数组,大于0代表有重复的用户名
        if(result.length > 0 ){
            return res.cc('用户名已被占用')
        }
        // TODO:用户名可以用，后续注册操作 
        // 将用户密码加密,利用bcrypt.hashSync(密码,长度)
        userInfo.password = bcrypt.hashSync(userInfo.password,10)
        // 定义插入新的用户数据sql语句
        const sqlStr = 'insert into ev_users set ?'
        db.query(sqlStr,{username:userInfo.username,password:userInfo.password},(err,result)=>{
            if(err){
                return res.cc('后台数据库出现错误')
            }
            // 如果受影响行数不等于1则报错
            if(result.affectedRows !=1){
                return res.cc('注册用户失败，请稍后再试！')
            }
            // 注册成功
            res.send({ status: 200, message: '注册成功！' })
        })
    })
}


// 登录接口处理函数'
export const login = (req,res)=>{
    // 验证客户端提供的表单数据,根据用户名从数据库查询信息
    const userInfo = req.body
    const sqlStr = 'select * from ev_users where username=?'
    db.query(sqlStr,userInfo.username,(err,result)=>{
        if(err)return res.cc('数据库查询错误')
        // 判断是否有数据
        if(result.length !== 1)return res.cc('该用户未注册')
        // 有数据则判断密码是否正确
        const passwordRes = bcrypt.compareSync(userInfo.password,result[0].password)
        if(!passwordRes) return res.cc('密码错误')
        // 校验成功,生成token,注意:剔除掉密码和头像的值
        const user = {...result[0],password:'',user_pic:''}
        const tokenStr = jwt.sign(user,tokenSetting.token_key,{
            expiresIn:tokenSetting.token_time
        })
        // 返回给客户端信息
        res.send({
            status:200,
            message:'登录成功',
            data:{
                token:'Bearer '+tokenStr
            }
        })
    })
}